Así que tengo algunos documentos de usuario que tienen nombres y apellidos. Me gustaría ofrecer la posibilidad de filtrarlos si una entrada dada "se parece" a ese nombre completo.
user: { firstName: "foo", lastName: "name", ... }Antes, estaba haciendo este filtro en el lado de javascript midiendo una "puntuación" de similitud entre la entrada y el nombre completo, pero desde que implementé un sistema de paginación ya no puedo hacer esto.
Ahora me gustaría encontrar una manera de hacer esto en el lado de la agregación.
Encontré this question y this one , que parece hacer lo mismo, pero como no usan la agregación directamente, me resulta difícil vincular esto con mi caso.
Una forma de hacerlo que he estado pensando es usar el operador $where en la agregación y luego addField para tener el "puntaje de similitud" con cada resultado de la consulta, luego filtrarlos en su puntaje usando las opciones de aggregatePaginate de Paginación.
Pero me parece que no puedo usar $where en la agregación. Alguna idea ?
Muchas gracias ! kev :)
Para la agregación, puede usar la función $ para ejecutar código personalizado. Sin embargo, eso anula el propósito de la paginación, ya que Mongo tiene que ejecutar este código para cada documento, además, se recomienda no ejecutar js en Mongo, ya que tiene un rendimiento algo malo.
Parece que solo está usando la base de datos incorrecta para el trabajo. Si esta es una característica crucial, le recomiendo probar una base de datos de búsqueda de texto como Atlas Search o Elasticsearch.
Si cambiar db no es una opción, y esta función es demasiado importante para eliminarla o alternarla. tal vez si proporciona detalles adicionales sobre cómo funciona la puntuación, será más fácil dar una respuesta completa.